home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / crh_n.arc / NANSI_I.ASM < prev    next >
Assembly Source File  |  1990-02-07  |  3KB  |  140 lines

  1.     page    66, 132
  2. ;------ nansi_i.asm ----------------------------------------------
  3. ; Contains code only needed at initialization time.
  4. ; (C) 1986 Daniel Kegel
  5. ; May be distributed for educational and personal use only
  6. ;-----------------------------------------------------------------
  7.  
  8.     include nansi_d.asm        ; definitions
  9.  
  10.     ; to nansi.asm
  11.     public    dosfn0
  12.  
  13.     ; from nansi.asm
  14.     extrn    break_handler:near
  15.     extrn    int_29:near
  16.     if    takeBIOS
  17.     extrn    new_vid_bios:near
  18.  
  19.     extrn    old_vid_bios:dword
  20.     endif
  21.     extrn    req_ptr:dword
  22.     extrn    xlate_tab_ptr:word
  23.  
  24.     ; from nansi_p.asm
  25.     extrn    param_buffer:word    ; adr of first byte free for params
  26.     extrn    param_end:word        ; adr of last byte used for params
  27.     extrn    redef_end:word        ; adr of last used byte for redefs
  28.  
  29.  
  30. code    segment byte public 'CODE'
  31.     assume    cs:code, ds:code
  32.  
  33. ;-------- dos function # 0 : init driver ---------------------
  34. ; Initializes device driver interrupts and buffers, then
  35. ; passes ending address of the device driver to DOS.
  36. ; Since this code is only used once, the buffer can be set up on top
  37. ; of it to save RAM.
  38.  
  39. dosfn0    proc    near
  40.  
  41.     ; Install BIOS keyboard break handler.
  42.     xor    ax, ax
  43.     mov    ds, ax
  44.     mov    bx, 6Ch
  45.     mov    word ptr [BX],offset break_handler
  46.     mov    [BX+02], cs
  47.     ; Install INT 29 quick putchar.
  48.     mov    bx, 0a4h
  49.     mov    word ptr [bx], offset int_29
  50.     mov    [bx+2], cs
  51.     if    takeBIOS
  52.     ; Install INT 10h video bios replacement.
  53.     mov    bx, 40h
  54.     mov    ax, [bx]
  55.     mov    word ptr cs:old_vid_bios, ax
  56.     mov    ax, [bx+2]
  57.     mov    word ptr cs:old_vid_bios[2], ax
  58.     mov    word ptr [bx], offset new_vid_bios
  59.     mov    word ptr [bx+2], cs
  60.     endif
  61.  
  62.  
  63.     push    cs
  64.     pop    ds
  65.     push    cs
  66.     pop    es            ; es=cs so we can use stosb
  67.     cld                ; make sure stosb increments di
  68.  
  69.     ; Calculate addresses of start and end of parameter/redef buffer.
  70.     ; The buffer occupies the same area of memory as this code!
  71.     ; ANSI parameters are accumulated at the lower end, and
  72.     ; keyboard redefinitions are stored at the upper end; the variable
  73.     ; param_end is the last byte used by params (changes as redefs added);
  74.     ; redef_end is the last word used by redefinitions.
  75.     mov    di, offset dosfn0
  76.     mov    param_buffer, di
  77.     add    di, 512
  78.     mov    param_end, di    ; addr of last byte in free area
  79.     inc    di
  80.  
  81.     ; Build the default redefinition table:
  82.     ;    control-printscreen -> control-P
  83.     ; (Must be careful not to write over ourselves here!)
  84.  
  85.     mov    al, 16        ; control P
  86.     stosb
  87.     mov    ax, 7200h    ; control-printscreen
  88.     stosw
  89.     mov    ax, 1        ; length field
  90.     mov    redef_end, di    ; address of last used word in table
  91.     stosw
  92.  
  93.  
  94.  
  95.     ; Build a 1:1 output character translation table.
  96.  
  97.     ; It is 256 bytes long, starts just after the param/redef buffer,
  98.  
  99.     ; and is the last thing in the initialized device driver.
  100.  
  101.     mov    xlate_tab_ptr, di
  102.  
  103.     xor    ax, ax
  104.  
  105. init_loop:
  106.  
  107.     stosb
  108.  
  109.     inc    al
  110.  
  111.     jnz    init_loop
  112.  
  113.  
  114.  
  115.     xor    ax, ax
  116.  
  117.     ; Return ending address of this device driver.
  118.  
  119.     ; Status is in AX.
  120.  
  121.     lds    si, req_ptr
  122.  
  123.     mov    word ptr [si+0Eh], di
  124.  
  125.     mov    [si+10h], cs
  126.  
  127.     ; Return exit status in ax.
  128.  
  129.     ret
  130.  
  131.  
  132.  
  133. dosfn0    endp
  134.  
  135.  
  136.  
  137. code    ends
  138.  
  139.     end                ; of nansi_i.asm
  140.